home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / Numeric / Precision.py < prev    next >
Text File  |  2006-01-20  |  3KB  |  112 lines

  1. """ A simple hack to start thinking about a better way to handle
  2. specification of typecodes.
  3.  
  4. TODO:
  5.     The code_table should proably be cached somehow
  6.     Float/Complex needs to have precision and range specifiers
  7. """
  8.  
  9. from multiarray import zeros
  10. import string
  11.  
  12. # dvhart - added the character 'u' for the UnisgnedInteger 'list of codes' ?
  13. typecodes = {'Character':'c', 'Integer':'1sil', 'UnsignedInteger':'bwu', 'Float':'fd', 'Complex':'FD'}
  14.  
  15. def _get_precisions(typecodes):
  16.     lst = []
  17.     for t in typecodes:
  18.         lst.append( (zeros( (1,), t ).itemsize()*8, t) )
  19.     return lst
  20.  
  21. def _fill_table(typecodes, table={}):
  22.     for key, value in typecodes.items():
  23.         table[key] = _get_precisions(value)
  24.     return table
  25.  
  26. _code_table = _fill_table(typecodes)
  27.  
  28. class PrecisionError(Exception):
  29.     pass
  30.  
  31. def _lookup(table, key, required_bits):
  32.     lst = table[key]
  33.     for bits, typecode in lst:
  34.         if bits >= required_bits:
  35.             return typecode
  36.     raise PrecisionError, key+" of "+str(required_bits)+" bits not available on this system"
  37.  
  38. Character = 'c'
  39.  
  40. try:
  41.     UnsignedInt8 = _lookup(_code_table, "UnsignedInteger", 8)
  42.     UInt8 = UnsignedInt8
  43. except(PrecisionError):
  44.     pass
  45. try:
  46.     UnsignedInt16 = _lookup(_code_table, "UnsignedInteger", 16)
  47.     UInt16 = UnsignedInt16
  48. except(PrecisionError):
  49.     pass
  50. try:
  51.     UnsignedInt32 = _lookup(_code_table, "UnsignedInteger", 32)
  52.     UInt32 = UnsignedInt32
  53. except(PrecisionError):
  54.     pass
  55. try:
  56.     UnsignedInt64 = _lookup(_code_table, "UnsignedInteger", 64)
  57.     UInt64 = UnsignedInt64
  58. except(PrecisionError):
  59.     pass
  60. try:
  61.     UnsignedInt128 = _lookup(_code_table, "UnsignedInteger", 128)
  62.     UInt128 = UnsignedInt128
  63. except(PrecisionError):
  64.     pass
  65. UnsignedInteger = 'u'
  66. UInt = UnsignedInteger
  67.  
  68.  
  69. try: Int0 = _lookup(_code_table, 'Integer', 0)
  70. except(PrecisionError): pass
  71. try: Int8 = _lookup(_code_table, 'Integer', 8)
  72. except(PrecisionError): pass
  73. try: Int16 = _lookup(_code_table, 'Integer', 16)
  74. except(PrecisionError): pass
  75. try: Int32 = _lookup(_code_table, 'Integer', 32)
  76. except(PrecisionError): pass
  77. try: Int64 = _lookup(_code_table, 'Integer', 64)
  78. except(PrecisionError): pass
  79. try: Int128 = _lookup(_code_table, 'Integer', 128)
  80. except(PrecisionError): pass
  81. Int = 'l'
  82.  
  83. try: Float0 = _lookup(_code_table, 'Float', 0)
  84. except(PrecisionError): pass
  85. try: Float8 = _lookup(_code_table, 'Float', 8)
  86. except(PrecisionError): pass
  87. try: Float16 = _lookup(_code_table, 'Float', 16)
  88. except(PrecisionError): pass
  89. try: Float32 = _lookup(_code_table, 'Float', 32)
  90. except(PrecisionError): pass
  91. try: Float64 = _lookup(_code_table, 'Float', 64)
  92. except(PrecisionError): pass
  93. try: Float128 = _lookup(_code_table, 'Float', 128)
  94. except(PrecisionError): pass
  95. Float = 'd'
  96.  
  97. try: Complex0 = _lookup(_code_table, 'Complex', 0)
  98. except(PrecisionError): pass
  99. try: Complex8 = _lookup(_code_table, 'Complex', 16)
  100. except(PrecisionError): pass
  101. try: Complex16 = _lookup(_code_table, 'Complex', 32)
  102. except(PrecisionError): pass
  103. try: Complex32 = _lookup(_code_table, 'Complex', 64)
  104. except(PrecisionError): pass
  105. try: Complex64 = _lookup(_code_table, 'Complex', 128)
  106. except(PrecisionError): pass
  107. try: Complex128 = _lookup(_code_table, 'Complex', 256)
  108. except(PrecisionError): pass
  109. Complex = 'D'
  110.  
  111. PyObject = 'O'
  112.